1 /*
2 Copyright: Marcelo S. N. Mancini (Hipreme|MrcSnm), 2018 - 2021
3 License:   [https://creativecommons.org/licenses/by/4.0/|CC BY-4.0 License].
4 Authors: Marcelo S. N. Mancini
5 
6 	Copyright Marcelo S. N. Mancini 2018 - 2021.
7 Distributed under the CC BY-4.0 License.
8    (See accompanying file LICENSE.txt or copy at
9 	https://creativecommons.org/licenses/by/4.0/
10 */
11 module hip.view.testscene;
12 version(Test):
13 
14 import hip.graphics.g2d.geometrybatch;
15 import hip.hiprenderer.shader;
16 import hip.hiprenderer;
17 import hip.hiprenderer.viewport;
18 import hip.view.scene;
19 import hip.math.utils;
20 
21 class TestScene : Scene, IHipPreloadable
22 {
23     import hip.api;
24     import hip.api.audio.audiosource;
25 
26     mixin Preload;
27 
28     //Lower Level API. Not available in the Scripting API
29     GeometryBatch geom;
30     Shader shader;
31 
32     IHipFont smallFont;
33     IHipFont bigFont;
34 
35     @Asset("sounds/pop.wav")
36     __gshared IHipAudioClip pop;
37 
38 
39     AHipAudioSource src;
40 
41     import hip.graphics.g2d.particles;
42     HipParticleSystem sys;
43 
44 
45     float x = 100, y = 100;
46 
47     override void initialize()
48     {
49         logg(getAssetsForPreload);
50         // logg(pop is null);
51         geom = new GeometryBatch(null, 5000, 5000);
52         geom.setColor(HipColor.green);
53 
54         setWindowSize(HipRenderer.width, HipRenderer.height);
55         src = HipAudio.getSource();
56         src.clip = pop;
57 
58 
59         smallFont = HipDefaultAssets.getDefaultFontWithSize(20);
60         bigFont = HipDefaultAssets.getDefaultFontWithSize(64);
61 
62         sys = new HipParticleSystem(500);
63         sys.config.colors = [HipColorStop(HipColor.red, 0), HipColorStop(HipColor(0x000000ff), 0.2)];
64         sys.config.velocityYInit = ValueRange(0, -300);
65         sys.setEmissionZone(100, 150, 100, 150);
66     }
67     override void update(float dt)
68     {
69         super.update(dt);
70         if(HipInput.areGamepadButtonsJustPressed([HipGamepadButton.psSquare, HipGamepadButton.psTriangle]))
71             logg("Button combination pressed!");
72 
73         auto v = HipInput.getAnalog(HipGamepadAnalogs.leftStick);
74 
75         x+= dt*400*v[0];
76         y+= dt*400*v[1];
77 
78         if(HipInput.isMouseButtonJustReleased(HipMouseButton.left))
79         {
80             src.play();
81             if(HipInput.isDoubleClicked(HipMouseButton.left))
82                 logg("Double clicked");
83             else
84                 logg("You just clicked me!");
85         }
86 
87         if(HipInput.isKeyJustPressed(HipKey.ENTER))
88         {
89             logg("Don't press ENTER!");
90         }
91         sys.update(dt);
92     }
93 
94     override void render()
95     {
96         //////////////////////Lower Level////////////////////////
97         super.render();
98         geom.setColor(HipColor.red);
99         geom.fillRectangle(0, 0, 200, 200);
100         geom.setColor(HipColor.green);
101         geom.fillRectangle(0, 0, 100, 100);
102         geom.flush();
103 
104 
105         //Use a non GC allocating string on render (String) for drawing the mousePosition
106         import hip.util.string;
107         float[2] mousePos = HipInput.getMousePosition();
108         setFont(smallFont);
109         String s = String(mousePos);
110         drawText(s.toString, cast(int)mousePos[0], cast(int)mousePos[1]);
111 
112         
113 
114         ////////////////////////Higher Level////////////////////////
115         setGeometryColor(HipColor.white);
116         setFont(null);
117         drawText("Hello World Test Scene (Default Font)", 300, 280, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP);
118         fillRectangle(cast(int)x, cast(int)y, 100, 100);
119 
120         drawText("Null Textures uses that sprite over here", 300, 480, HipColor.white, HipTextAlign.LEFT, HipTextAlign.TOP);
121         fillRectangle(cast(int)x+200, cast(int)y, 100, 100);
122         drawTexture(null, 300, 500);
123 
124         sys.draw();
125 
126     }
127 }